export type InputConfig = {
    show?: boolean;
    placeholder?: string | undefined;
}
export type SideShowConfig = {
    show?: boolean;
    weekShow?: Function;
}
export type RenderConfig = {
    id?: string | undefined
    el?: HTMLElement | null;
    weekMap?: any[];
    monthMap?: any[];
    yearMin?: number | string | null; // 最小选择年份
    yearMax?: number | string | null; // 最大选择年份
    rowCount?: number; // 日期显示行数
    sundayFirst?: boolean; // 星期天是否排第一天
    weekFormatter?:Function | null;
    monthFormatter?:Function | null;
    inputConfig?: InputConfig | null;
    sideConfig?: SideShowConfig | null;// 右侧栏配置
}
export type CalendarData = {
    sundayFirst?: boolean,
    date?: string | undefined,
    year?: number| string | null;
    month?: number| string | null;
    day?: number| string | null;
    week?:{
        name?: string | undefined;
        value?: number | null;
    },
    weeks: any[],
    days: any[],
    dayRows?: Array<Array<any>>;
    totalDays?: number,
    currMonthFirstDay?: number,
    prevMonthSumDays?: number,
    currMonthSumDays?: number,
};
export type CalendarElements = {
    INPUT: HTMLElement | null;
    INPUT_BOX: HTMLElement | null;
    YEAR_SELECT: HTMLElement | null;
    MONTH_SELECT: HTMLElement | null;
    MONTH_SELECT_PREV: HTMLElement | null;
    MONTH_SELECT_NEXT: HTMLElement | null;
    BACK_TODAY: HTMLElement | null;
    SELECT_BOX: HTMLElement | null;
    DATE_TABLE: HTMLElement | null;
    DATE_TABLE_THS: HTMLElement | null;
    DATE_TABLE_TDS: HTMLElement | null;

    CALENDAR_WRAP: HTMLElement | null;
    CALENDAR: HTMLElement | null;
    LEFT_SIDE_BOX: HTMLElement | null;
    RIGHT_SIDE_BOX: HTMLElement | null;
    CURR_DATE: HTMLElement | null;
    CURR_WEEK: HTMLElement | null;
    CURR_DAY: HTMLElement | null;
    CURR_TIME: HTMLElement | null;
}
export interface IProps {
    isRender?: boolean;
    renderConfig?: RenderConfig;
    dateConfig?: IDateConfig;
    create?:Function;
    mounted?:Function;
    destroy?:Function;
}
export interface IDateConfig {
    date?: string | undefined,
    year?:  number| string | null;
    month?: number| string | null;
    day?: number | string | null;
}

export declare class Calendar {
    isRender:boolean;
    renderConfig: RenderConfig;
    calendarData: CalendarData;
    container: HTMLElement | null;
    calender: HTMLElement | null;
    calendarElements: CalendarElements;
    create: Function;
    mounted: Function;
    destroy: Function;
    createCalendarFun: any;

    constructor(props: IProps);
    // 计算获取日历对象数据方法
    getCalendarData(dateConfig: IDateConfig): void;
    // 计算获取某天星期
    getWeek(date:string): any;
    // 计算获取某天一周星期展示数据
    getWeeks(): any[];
    // 计算获取月展示天数据
    getDays(): any[];
    // 渲染方法
    render(): void;
}
